﻿class TrainYourMind {
	public static var OPER_ADD:Number = 0;
	public static var OPER_DIFF:Number = 1;
	public static var OPER_MULTI:Number = 2;
	public static var OPER_DIV:Number = 3;

	private var valor1:Number;
	private var valor2:Number;
	private var operador:Number;
	private var resultado:Number;

	private var level:Number;

	function TrainYourMind() {

	}

	function start() {
		valor1 = 0;
		valor2 = 0;
		operador = -1;
		resultado = 0;
		level = 0;
		
		nextLevel();
	}

	function nextLevel() {
		level++;

		valor1 = Math.round(Math.random()*(level*10));
		valor2 = Math.round(Math.random()*(level*10));

		switch (Math.round(Math.random()*3)) {
			case OPER_ADD :
				operador = OPER_ADD;
				resultado = valor1 + valor2;
				break;
			case OPER_DIFF :
				operador = OPER_DIFF;
				resultado = valor1 - valor2;
				break;
			case OPER_MULTI :
				operador = OPER_MULTI;
				resultado = valor1 * valor2;
				break;
			case OPER_DIV :
				operador = OPER_DIV;
				
				if(valor2 == 0) {
					valor2 = 1;
				}
				
				resultado = valor1 / valor2;
				break;
		}
		
		resultado = toFixed2(resultado);

	}

	function verificar(res:Number):Boolean {
//		trace(res.toString() + "==" + resultado.toString()
//			+ " == " + (res == resultado));
		
		return (res == resultado);
	}

	function setValor1(v:Number):Void {
		valor1 = v;
	}

	function setValor2(v:Number):Void {
		valor2 = v;
	}

	function setResultado(v:Number):Void {
		resultado = v;
	}
	
	function setOperador(v:Number):Void {
		operador = v;
	}

	function getValor1():Number {
		return valor1;
	}

	function getValor2():Number {
		return valor2;
	}

	function getResultado():Number {
		return resultado;
	}
	
	function getOperador():Number {
		return operador;
	}
	
	function getLevel():Number {
		return level;
	}
	
	private function toFixed2(num:Number) {
		return Math.floor(num * 100) / 100;
	}
}